<?php

header("Content-Type: text/html;charset=utf-8");
require_once("Basededatos.php");

class Ckardex {

    public $entitat = 'ckardex';
    public $nomDadesClau = array('codigoCkardex');
    public $fk = array(
        'tipolocalizacion' => array('Tipolocalizacion', 'descripcionTipoLocalizacion', 'tipolocalizacionSelected', 'tipolocalizacion'),
        'tipomovimiento' => array('Tipomovimiento', 'descripcionTipoMovimiento', 'tipomovimientoSelected', 'tipomovimiento'),
        'producto' => array('Producto', 'descripcionProducto', 'productoSelected', 'producto'),
        'rol' => array('Rol', 'descripcionRol', 'rolSelected', 'rol'),
        'grupomovimientock' => array('Grupomovimiento', 'descripcionGrupomovimiento', 'grupomovimientoSelected', 'grupomovimiento'),
        'tipolocalizaciondependiente' => array('Tipolocalizacion', 'descripcionTipoLocalizacion', 'tipolocalizaciondependienteSelected', 'tipolocalizacion'),
        'tipomovimientodependiente' => array('Tipomovimiento', 'descripcionTipoMovimiento', 'tipomovimientodependienteSelected', 'tipomovimiento'),
        'productodependiente' => array('Producto', 'descripcionProducto', 'productodependienteSelected', 'producto')
    );
//tipus de dades string, int, double, date
    public $tipoDadesClau = array(
        'codigoCkardex' => 'int'
    );
    public $tipoDades = array(
        'codigoCkardex' => 'int',
        'tipolocalizacion' => 'int',
        'tipomovimiento' => 'int',
        'producto' => 'int',
        'rol' => 'int',
        'grupomovimientock' => 'string',
        'tipolocalizaciondependiente' => 'int',
        'tipomovimientodependiente' => 'int',
        'productodependiente' => 'int',
        'asignalote' => 'int',
        'asignalotedependiente' => 'int',
        'obligaorigen' => 'int',
        'activockardex' => 'int',
        'liberadock' => 'int',
        'liberadockd' => 'int'
    );
    public $tipoCero = array(
        'codigoCkardex' => 'NULL',
        'tipolocalizacion' => 'NULL',
        'tipomovimiento' => 'NULL',
        'producto' => 'NULL',
        'rol' => 'NULL',
        'grupomovimientock' => 'NULL',
        'tipolocalizaciondependiente' => 'NULL',
        'tipomovimientodependiente' => 'NULL',
        'productodependiente' => 'NULL',
        'asignalote' => '0',
        'asignalotedependiente' => '0',
        'obligaorigen' => '1',
        'activockardex' => '0',
        'liberadock' => '0',
        'liberadockd' => '0'
    );
    public $nomDadesTotal = array('codigoCkardex', 'tipolocalizacion', 'tipomovimiento', 'producto', 'rol', 'grupomovimientock', 'tipolocalizaciondependiente', 'tipomovimientodependiente', 'productodependiente', 'asignalote', 'asignalotedependiente', 'obligaorigen', 'activockardex', 'liberadock','liberadockd');
    public $nomDadesCreate = array('codigoCkardex', 'tipolocalizacion', 'tipomovimiento', 'producto', 'rol', 'grupomovimientock', 'tipolocalizaciondependiente', 'tipomovimientodependiente', 'productodependiente', 'asignalote', 'asignalotedependiente', 'obligaorigen', 'activockardex', 'liberadock','liberadockd');
    public $nomDadesUpdate = array('tipolocalizacion', 'tipomovimiento', 'producto', 'rol', 'grupomovimientock', 'tipolocalizaciondependiente', 'tipomovimientodependiente', 'productodependiente', 'asignalote', 'asignalotedependiente', 'obligaorigen', 'activockardex', 'liberadock','liberadockd');
    public $bd;
    public $utiles;
    public $llista = array();
    public $unckardex = array();

    public function __construct($bd) {
        $this->bd = $bd;
        $this->utiles = $bd->utiles;
    }

    public function getLlista() {
        $resultado = mysql_query('SELECT * FROM ' . $this->entitat, $this->bd->conexion);
        $llistaprevia = array();
        $i = 0;

        while ($v = mysql_fetch_array($resultado)) {

            foreach ($v as $r => $index) {
                if (isset($this->fk[$r])) {
                    $otro = false;
                    if (strtoupper($this->fk[$r][0]) != strtoupper($this->entitat)) {
                        require_once($this->fk[$r][0] . '.php');
                        $otro = true;
                    }
                    $laentidad = 'new ' . $this->fk[$r][0] . '($this->bd);';
                    eval('$ef = ' . $laentidad);
                    $this->llista[$i][$r] = ''; //$v[$r];
                    //selectClau
                    $lallista = $ef->selectClau($v[$r]);
                    if ($ef == null) {
                        $this->llista[$i][$r] = 'no encontrado';
                    } else {
                        foreach ($lallista as $elem) {
                            $this->llista[$i][$r] = $elem[$this->fk[$r][1]];
                        }
                    }
                } else {
                    $this->llista[$i][$r] = $v[$r];
                }
            }
            $i++;
        }
    }

    public function createEntitat($valors) {

        $checkValores = true;
        $i = 0;
        foreach ($this->nomDadesCreate as $index) {
            $valors[$i] = addslashes($valors[$i]);
            if ($this->tipoDades[$index] == "int") {
                if ($valors[$i] != "") {
                    if (!is_numeric($valors[$i])) {
                        $checkValores = false;
                        break;
                    } else {
                        $valors[$i] = (int) $valors[$i];
                    }
                }
            }
            $i++;
        }
        if (!$checkValores) {
            $_SESSION['missatge'] = "msg-bbdd-030";
            return false;
        } else {
            $into = $this->utiles->comaNoms($this->nomDadesCreate);
            $values = $this->utiles->comaValoresTipo($this->tipoDades, $this->tipoCero, $this->nomDadesCreate, $valors, ",");
            $strQuery = "INSERT INTO " . $this->entitat . " (" . $into . ") VALUES (" . $values . ")";
            $insert = mysql_query($strQuery, $this->bd->conexion);
            if ($insert) {
                $_SESSION['missatge'] = "msg-bbdd-040";
                return true;
            } else {
                $_SESSION['missatge'] = "msg-bbdd-050";
                return false;
            }
        }
    }

    public function updateEntitat($claus, $valors) {
        /*
         * ELS NOMS DELS CAMPS A UPDATE SON A $nomDadesUpdate
         * Antes del update
         * - se evita inyección de código con addslashes
         * - se cambia string a int en el caso de int a la bbdd
         * - se utiliza Utiles para preparar el sql (SET ... WHERE ...)
         */

        $checkValores = true;
        $i = 0;
        foreach ($this->nomDadesUpdate as $index) {
            $valors[$i] = addslashes($valors[$i]);
            if ($this->tipoDades[$index] == "int") {
                if ($valors[$i] != "") {
                    if (!is_numeric($valors[$i])) {
                        $checkValores = false;
                        break;
                    } else {
                        $valors[$i] = (int) $valors[$i];
                    }
                }
            }
            $i++;
        }
        $i = 0;
        foreach ($this->nomDadesClau as $index) {
            $claus[$i] = addslashes($claus[$i]);
            if ($this->tipoDadesClau[$index] == "int") {
                if ($claus[$i] != "") {
                    if (!is_numeric($claus[$i])) {
                        $checkValores = false;
                        break;
                    } else {
                        $claus[$i] = (int) $claus[$i];
                    }
                }
            }
            $i++;
        }
        if (!$checkValores) {
            $_SESSION['missatge'] = "msg-bbdd-030";
            return false;
        } else {
            $values = $this->utiles->comaValoresNomTipo($this->tipoDades, $this->nomDadesUpdate, $valors, ",");
            $claves = $this->utiles->comaValoresNomTipo($this->tipoDades, $this->nomDadesClau, $claus, "AND");
            $update = mysql_query("UPDATE " . $this->entitat . " SET " . $values . " WHERE " . $claves, $this->bd->conexion);
            if ($update) {
                $_SESSION['missatge'] = "msg-bbdd-060";
                return true;
            } else {
                $_SESSION['missatge'] = "msg-bbdd-070";
                return false;
            }
        }
    }

    public function deleteEntitat($claus) {
        for ($i = 0, $size = count($claus); $i < $size; $i++) {
            $claus[$i] = addslashes($claus[$i]);
        }
        $claves = $this->utiles->comaValoresNomTipo($this->tipoDades, $this->nomDadesClau, $claus, "AND");

        $delete = mysql_query("DELETE FROM " . $this->entitat . " WHERE " . $claves, $this->bd->conexion);
        if ($delete) {
            $_SESSION['missatge'] = "msg-bbdd-080";
            return true;
        } else {
            $_SESSION['missatge'] = "msg-bbdd-090";
            return false;
        }
    }

    public function selectClau($claus) {
        for ($i = 0, $size = count($claus); $i < $size; $i++) {
            $claus[$i] = addslashes($claus[$i]);
        }
        $lallista = array();
        $claves = $this->utiles->comaValoresNomTipo($this->tipoDades, $this->nomDadesClau, $claus, "AND");
        $resultado = mysql_query("SELECT * FROM " . $this->entitat . " WHERE " . $claves, $this->bd->conexion);
        while ($element = mysql_fetch_assoc($resultado)) {
            $lallista[] = $element;
        }
        return $lallista;
    }

}

?>
